package org.example.leetCode;

/**
 * 198. 打家劫舍
 * 你是一个专业的小偷，计划偷窃沿街的房屋。
 * 每间房内都藏有一定的现金，影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统，
 * 如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。
 * 给定一个代表每个房屋存放金额的非负整数数组，计算你 不触动警报装置的情况下 ，一夜之内能够偷窃到的最高金额。
 */
public class Code198 {
    public int rob(int[] nums) {
        if(nums==null||nums.length==0){
            return 0;
        }
        int count=nums.length;
        if(count==1){
            return nums[0];
        }
        if(count==2){
            return Math.max(nums[0],nums[1]);
        }
        int[] dp=new int[count];
        dp[0]=nums[0];
        dp[1]=Math.max(nums[0],nums[1]);
        int max=0;
        for(int i=2;i< count;i++){
            dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);
            max=Math.max(max,dp[i]);
        }
        return max;
    }

    public static void main(String[] args) {
        Code198 solution = new Code198();

        // 示例输入
        int[] nums1 = {1, 2, 3, 1}; // 输出: 4
        int[] nums2 = {2, 7, 9, 3, 1}; // 输出: 11
        int[] nums3 = {2, 1, 1, 2}; // 输出: 4
        int[] nums4 = {1}; // 输出: 1
        int[] nums5 = {}; // 输出: 0

        // 测试并输出结果
//        System.out.println("示例1最大金额: " + solution.rob(nums1));
        System.out.println("示例2最大金额: " + solution.rob(nums2));
        System.out.println("示例3最大金额: " + solution.rob(nums3));
        System.out.println("示例4最大金额: " + solution.rob(nums4));
        System.out.println("示例5最大金额: " + solution.rob(nums5));
    }
}
